package com.xiaobange.vo;


import com.xiaobange.utils.ResponseCodeEnum;

import java.io.Serializable;

/**
 * @version 1.0
 * @Author 小班哥
 * @Date 2025/4/26 13:04
 * @Explain 统一响应结果类
 */
public class ResultResponse<T> implements Serializable {
    /**
     * 状态码
     */
    private Integer code;
    /**
     * 信息
     */
    private String msg;
    /**
     * 数据
     */
    private T data;


    public ResultResponse() {
        
    }


    /**
     * 啥也没有的成功状态
     * @return 结果
     * @param <T> 泛型
     */
    public static <T> ResultResponse<T> success(){
        ResultResponse<T> response = new ResultResponse<>();
        response.setCode(200);
        response.setmsg("success");
        return response;
    }

    /**
     * 只有状态码的成功响应
     * @param code 状态码
     * @return 结果
     * @param <T> 泛型
     */
    public static <T> ResultResponse<T> success(Integer code){
        ResultResponse<T> response = new ResultResponse<>();
        response.setCode(code);
        response.setmsg("success");
        return response;
    }


    /**
     * 只有状数据的成功响应
     * @param msg 数据
     * @return 结果
     * @param <T> 泛型
     */
    public static <T> ResultResponse<T> success(String msg){
        ResultResponse<T> response = new ResultResponse<>();
        response.setCode(200);
        response.setData(null);
        response.setmsg(msg);
        return response;
    }

    /**
     * 只有状数据的成功响应
     * @param data 数据
     * @return 结果
     * @param <T> 泛型
     */
    public static <T> ResultResponse<T> success(T data){
        ResultResponse<T> response = new ResultResponse<>();
        response.setCode(200);
        response.setData(data);
        response.setmsg("success");
        return response;
    }

    /**
     * 有状态码，信息的成功响应
     * @param code 状态码
     * @param msg 信息
     * @return 结果
     * @param <T> 泛型
     */
    public static <T> ResultResponse<T> success(Integer code,String msg){
        ResultResponse<T> response = new ResultResponse<>();
        response.setCode(code);
        response.setmsg(msg);
        return response;
    }


    /**
     * 有状态码，信息，数据，成功响应
     * @param code 状态码
     * @param msg 信息
     * @param data 数据
     * @return 结果
     * @param <T> 泛型
     */
    public static <T> ResultResponse<T> success(Integer code,String msg,T data){
        ResultResponse<T> response = new ResultResponse<>();
        response.setCode(code);
        response.setmsg(msg);
        response.setData(data);
        return response;
    }




    /**
     * 只有状态码错误响应
     * @param code 状态码
     * @return 结果
     * @param <T> 泛型
     */
    public static <T> ResultResponse<T> error(Integer code){
        ResultResponse<T> response = new ResultResponse<>();
        response.setCode(code);
        return response;
    }

    /**
     * 只有错误信息的错误响应（默认状态码为500）
     * @param msg 错误信息
     * @return 结果
     * @param <T> 泛型
     */
    public static <T> ResultResponse<T> error(String msg){
        ResultResponse<T> response = new ResultResponse<>();
        response.setCode(ResponseCodeEnum.SERVER_ERROR.getCode());
        response.setmsg(msg);
        return response;
    }



    /**
     * 有状态码，信息的错误响应
     * @param code 状态码
     * @param msg 信息
     * @return 结果
     * @param <T> 泛型
     */
    public static <T> ResultResponse<T> error(Integer code,String msg){
        ResultResponse<T> response = new ResultResponse<>();
        response.setCode(code);
        response.setmsg(msg);
        return response;
    }



    
    
    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getmsg() {
        return msg;
    }

    public void setmsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
